package com.yf.cl;

public class ClassLoaderTest {
    public static void main(String[] args) {
        //获取系统类加载器
        ClassLoader systemClassLoader = ClassLoader.getSystemClassLoader();
        System.out.println(systemClassLoader); // sun.misc.Launcher$AppClassLoader@18b4aac2

        //获取获取其上层，扩展类加载器ExtClassLoader
        ClassLoader extClassLoader = systemClassLoader.getParent();
        System.out.println(extClassLoader); // sun.misc.Launcher$ExtClassLoader@4554617c

        //获取其上层，引导类加载器BootstrapClassLoader
        ClassLoader bootstrapClassLoader = extClassLoader.getParent();
        System.out.println(bootstrapClassLoader); // null

        // 获取用户自定义类的类加载器
        ClassLoader classLoader = ClassLoaderTest.class.getClassLoader();
        System.out.println(classLoader); // sun.misc.Launcher$AppClassLoader@18b4aac2

        // String类是使用引导类加载器进行加载的。可见java的核心类库都是使用引导类加载器进行加载的。
        ClassLoader strClassLoader = String.class.getClassLoader();
        System.out.println(strClassLoader); // null

        /*
        启动类加载器（引导类加载器）BootstrapClassLoader使用C/C++实现，嵌套在JVM内部
        用来加载java核心类库(JAVA_HOME/jre/lib/rt.jar, resource.jar或sun.boot.class.path路径下的内容)，用于提供JVM自身需要的娄
        出于安全考虑，Bootstrap启动类加载器只加载包名为java,javax,sun等包下的类
         */
    }
}
